package org.cxn.tools.commons.poi.excel;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

/**
 * Created by IntelliJ IDEA.
 * User: lenovo
 * Date: 11-12-19
 * Time: 下午12:12
 * To change this template use File | Settings | File Templates.
 */
public class MyHSSFSheet {

    /**
     * 合并单元格列 只考虑26个英文字母列
     * 例如:合并第三行 A-D  colspan(sheet,"A","D",3) </br>
     * @param sheet                  </br>
     * @param begin 合并开始          </br>
     * @param end   合并结束          </br>
     * @param row   合并第几行的列     </br>
     *
     */
    public final void colspan(Sheet sheet, String begin, String end, int row) {
        int _begin = begin.toLowerCase().charAt(0)-97;
        int _end = end.toLowerCase().charAt(0)-97;
        sheet.addMergedRegion(new CellRangeAddress(row-1, row-1, _begin, _end));
    }


    /**
     * 合并单元格行
     * 例如合并表格中G列中的2-5行
     * rowspan(sheet,2,5,"G")</br>
     * @param sheet                </br>
     * @param begin 开始位置        </br>
     * @param end   结束位置        </br>
     * @param col   合并的是第几列   </br>
     */
    public final void rowspan(Sheet sheet, int begin, int end, String col) {
        int _col = col.toLowerCase().charAt(0)-97;
        sheet.addMergedRegion(new CellRangeAddress(begin-1, end-1,_col,_col));
    }

    /**
     * 合并单元格 行和列可以一起合并
     * 比如合并2-5行 列c-g
     * unitespan(sheet,2,5,"c","g");
     * @param sheet
     * @param rowBegin  行开始
     * @param rowEnd    行结束
     * @param colBegin  列开始
     * @param colEnd    列结束
     */
    public final void unitespan(Sheet sheet, int rowBegin, int rowEnd, String colBegin, String colEnd) {
        int _colBegin = colBegin.toLowerCase().charAt(0)-97;
        int _colEnd = colEnd.toLowerCase().charAt(0)-97;
        sheet.addMergedRegion(new CellRangeAddress(rowBegin-1, rowEnd-1, _colBegin, _colEnd));
    }

    /**
     *  设置列宽度 </br>
     * @param sheet  </br>
     * @param col 需要加宽的列,参数为字母 a,b,c...z   </br>
     * @param width 需要加宽的大小倍数,比如2就是两倍大小 </br>
     */
    public final void setColumnWidth(Sheet sheet, String col, float width){
        // 设置列宽度 8*256 为正常一个单元格的宽度
        sheet.setColumnWidth((col.toLowerCase().charAt(0) - 97),new Float(8 * 256 * width).intValue());
    }

    /**
     * 根据内容自动调整本列宽度            </br>
     * @param sheet                     </br>
     * @param col  第几列 a,b,c....z     </br>
     */
    public final void autoSizeColumn(Sheet sheet, String col){
        sheet.autoSizeColumn(col.toLowerCase().charAt(0)-97);
    }


    private MyHSSFSheet() {
    }

    /**
     * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
     * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载.
     */
    private static class SingletonHolder {
        /**
         * 静态初始化器,由JVM来保证线程安全
         */
        private static MyHSSFSheet sheet = new MyHSSFSheet();
    }

    public final static MyHSSFSheet getInstance() {
        return SingletonHolder.sheet;
    }
}
